package leetcode.ArrayAndString;


/**
 * 旋转数组
 * 给定一个数组，将数组中的元素向右移动 k 个位置，其中 k 是非负数。
 * 输入: [1,2,3,4,5,6,7] 和 k = 3
 * 输出: [5,6,7,1,2,3,4]
 */

public class Rotate {
    public void rotate1(int[] nums, int k) {
        if (nums.length == 0 || (k %= nums.length) == 0) {
            return;
        }
        int temp;
        for (int j = 0; j < (nums.length - k); j++) {
            if (nums.length > 1) {
                temp = nums[0];
                for (int i = 1; i < nums.length; i++) {
                    nums[i - 1] = nums[i];
                }
                nums[nums.length - 1] = temp;
            }
        }

    }

    public void rotate2(int[] nums, int k) {
        if (nums.length == 0 || (k %= nums.length) == 0) {
            return;
        }
        int length = nums.length;
        int start = 0;
        int i = 0;
        int cur = nums[i];

        for (int j = 0; j < length; j++) {
            i = (i + k) % length; //移动的距离
            int t = nums[i];
            nums[i] = cur;
            if (i == start) {
                ++start;
                ++i;
                cur = nums[i];
            } else {
                cur = t;
            }
        }
    }
}
